/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ejb;

import com.entidades.Recurso;
import com.entidades.Solicitud;
import com.entidades.Usuario;
import com.exceptions.BancoException;
import java.util.Date;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author JERONIMO
 */
@Stateless
public class SolicitudFacade extends AbstractFacade<Solicitud> {
    @PersistenceContext(unitName = "Cualquiera-ejbPU")
    private EntityManager em;
     
    @EJB
    RecursoFacade ejbRecurso;
    @EJB
    UsuarioFacade ejbCliente;
    
    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public SolicitudFacade() {
        super(Solicitud.class);
    }
 
     /*public void crearSolicitud(Solicitud solicitud) throws BancoException{

       //Se verifica si el cliente ya existe;
         System.out.print("Se verifica si el cliente ya existe");
        Solicitud cte = findByIdentificacion(solicitud.getCedula());
        
        if(cte!= null){
            throw new BancoException("El cliente con cedula " + solicitud.getCedula() +" ya existe en el sistema");
        }
        
        em.persist(solicitud);
        //super.create(cliente);
    }*/
     
     @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public Integer crearSolicitud1(Solicitud solicitud, long cedula, int codigorecurso, String estado) throws BancoException{
        
        Usuario cte = ejbCliente.findByCedula(cedula);
        Recurso cte1 = ejbRecurso.findByCodigorecurso(codigorecurso);
        Recurso cte3 = ejbRecurso.findByEstado("FALSE",codigorecurso);
        if(cte1 == null){
            throw new BancoException("Recurso no existe ... ");
        }    
        if(cte == null){
            throw new BancoException("Cedula no existe ... ");
        }
        solicitud.setEstado(estado);
        solicitud.setCedula(cte);
        solicitud.setCodigorecurso(cte1);
        Solicitud cte2 = findBySoli(solicitud.getFecha(),solicitud.getHora(),solicitud.getCodigorecurso(),solicitud.getTipo());
        if(cte3 != null)
        {
            throw new BancoException("El recurso no esta disponible ");
        }
        if(cte2 != null)
            {
                throw new BancoException("El recurso en esta fecha y hora esta prestado ");
            }
        
        
        Date fechaActual = new Date(System.currentTimeMillis());
        solicitud.setFecha(fechaActual);
        solicitud.setTipo(cte.getTipo());
        solicitud = em.merge(solicitud);
        System.out.print(solicitud.getCodigosolicitud());
        return solicitud.getCodigosolicitud();
        
    }


  @TransactionAttribute(TransactionAttributeType.SUPPORTS)
    public Solicitud findBySoli( Date fecha, String hora, Recurso codigorecurso,String tipo){
      Query  q = em.createNamedQuery("Solicitud.findBySoli");
        q.setParameter("fecha", fecha);
        q.setParameter("hora", hora);
        q.setParameter("codigorecurso", codigorecurso);
        q.setParameter("tipo", tipo);
        try{
           return ((Solicitud)q.getSingleResult());
        }catch(NoResultException nre){
            return null;
        }
        
    }
  
      
    public Solicitud modificarSolicitud(Solicitud cte){
        if (em.contains(cte)){
            System.out.println("Solicitud " + cte.getCodigorecurso() + " SI existe en el contexto de persistencia!" );
        }else{
            System.out.println("Solicitud " + cte.getCodigorecurso() + " NO existe en el contexto de persistencia!" );
        }
      
        return cte = em.merge(cte);
        
    }
    
    
}
